package leetcode_go

func lengthOfLongestSubstring(s string) int {
	// 使用map记录每个字符是否出现过
	m := make(map[byte]bool)
	n := len(s)
	if n == 0 {
		return 0
	}
	rp, maxLen := 0, 0
	for i := 0; i < n; i++ {
		for rp < n && m[s[rp]] == false {
			// 如果map中没有就存储
			m[s[rp]] = true
			// 向前一步
			rp++
		}
		//// 走到结尾或者m中有重复的值
		//max := func(n1, n2 int) int {
		//	if n1 > n2 {
		//		return n1
		//	}
		//	return n2
		//}
		maxLen = max(maxLen, rp-i)
		// 能走到这里说明map中肯定存在和当前rp指向的元素相同的元素，将开头i指向的元素剔除
		delete(m, s[i])
	}
	return maxLen
}

func max(n1, n2 int) int {
	if n1 > n2 {
		return n1
	}
	return n2
}
